package LeetCode;

import java.util.HashSet;
import java.util.Set;

/**
 * @author VX5
 * @Title: MJC
 * @ProjectName DataStructure
 * @Description: TODO
 * @date ${DAT}18:02
 */
public class LeetCode242 {
    public static void main(String[] args) {
        System.out.println(new LeetCode242().isAnagram("ab", "b"));
    }

    public boolean isAnagram(String s, String t) {
        /* 这种做法如果遇到了重复的数就会被抵消掉
        if (s.equals(t)){
            return true;
        }
        if (s.length() != t.length()){
            return false;
        }
        //先进行数组的转换
        char[] arrs = s.toCharArray();
        char[] arrt = t.toCharArray();

        Set<Character> set = new HashSet<>();
        for (char arr : arrs) {
            set.add(arr);
        }
        for (char c : arrt) {
            if (!set.contains(c)){
                return false;
            }
        }
        return true;
    }*/

        //为了检查 tt 是否是 ss 的重新排列，我们可以计算两个字符串中每个字母的出现次数并进行比较。因为 SS 和 TT 都只包含 A-ZA−Z 的字母，所以一个简单的 26 位计数器表就足够了。
        //我们需要两个计数器数表进行比较吗？实际上不是，因为我们可以用一个计数器表计算 ss 字母的频率，用 tt 减少计数器表中的每个字母的计数器，然后检查计数器是否回到零。

        if (s.length() != t.length()){
            return false;
        }
        int[] counter = new int[256];
        for (int i = 0; i < s.length(); i++){
            counter[s.charAt(i)]++;//s的加进来
            counter[t.charAt(i)]--;//t的减出去
        }
        for (int i : counter) {
            if (i != 0){
                return false;
            }
        }
        return true;
    }
}
